{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 反射\n",
    "\n",
    "参考：[reflection-cpp-cli](https://learn.microsoft.com/zh-cn/cpp/dotnet/reflection-cpp-cli) & [reflexpr](https://en.cppreference.com/w/cpp/keyword/reflexpr)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "反射允许在运行时检查已知数据类型。反射允许枚举给定程序集中的数据类型，并且可以发现给定类或值类型的成员。无论类型在编译时是已知还是引用，情况都是如此。这使反射成为开发和代码管理工具的有用功能。\n",
    "\n",
    "计算机程序在运行时（runtime）可以访问、检测和修改它本身状态或行为的一种能力。比喻来说反射就是程序在运行的时候能够“观察”并且修改自己的行为。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## C++ 本身提供的工具\n",
    "\n",
    "- `sizeof`：查询类型的内存大小\n",
    "- `typeid`：运行时检查类型信息\n",
    "- `type_traits`：元编程的重要组成部分，它提供了大量对类型进行查询和操作的实用工具，很多反射技巧或多或少都用到了这个库。"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
